package com.eobard.utils;

/**
 * @Author: Eobard Gu
 * @Date: 2025-07-18
 * @Description: 线程工具类
 */
public class ThreadUtils {
    //默认为IO密集型任务
    private static boolean isIoIntensive = true;
    //获取CPU核心数
    private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();

    //队列容量
    private static final int QUEUE_CAPACITY = 1000;

    /**
     * 设置是否为IO密集型任务
     *
     * @param ioIntensive
     */
    public static void setIsIoIntensive(boolean ioIntensive) {
        isIoIntensive = ioIntensive;
    }

    /**
     * 获取推荐的核心线程数
     *
     * @return 核心线程数
     */
    public static int getCoreSize() {
        if (isIoIntensive) {
            return CPU_COUNT * 2; // IO 密集型推荐 2x
        } else {
            return Math.max(2, CPU_COUNT + 1); // CPU 密集型推荐 CPU + 1,默认为2核
        }
    }

    /**
     * 获取推荐的最大线程数
     *
     * @return 最大线程数
     */
    public static int getMaxSize() {
        if (isIoIntensive) {
            return CPU_COUNT * 5;               //IO密集型推荐更大的弹性线程池
        } else {
            return Math.max(4, CPU_COUNT * 2); // CPU密集型推荐为2x
        }
    }

    /**
     * 获取队列最大容量
     * @return
     */
    public static int getQueueCapacity() {
        return QUEUE_CAPACITY;
    }

    public static int getQueueCapacity(int capacity) {
        return capacity;
    }
}
